const { Sequelize , DataTypes , Model } = require('sequelize');

const sequelize = new Sequelize({
    host: 'localhost',
    port: 3306,
    username: 'root' ,
    password: '' ,
    database: 'ecut',
    dialect: 'mysql'
});

// 采用 ES6 提供的支持来定义 模型
class Panda extends Model {
}

const attributes = {
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    } ,
    name: {
        type: DataTypes.STRING,
        allowNull: true
    } ,
    gender: {
        type: DataTypes.STRING
    } ,
    birthdate: {
        type: DataTypes.DATE
    }
};

const options = {
    // 指定数据库连接
    sequelize: sequelize ,
    // 显示指定数据库表名称
    tableName: 't_pandas',
    // 指示不要为新创建的模型添加 createAt 和 updateAt 属性
    timestamps: false
}

// 通过 Panda.init 方法初始化模型
Panda.init( attributes , options );

Panda.findByPk( 7 ).then ( result => {
    let p = result.dataValues ;
    return p ;
}).then( p => {
    console.log( p );
    p.name = '平安';
    p.gender = 'female';
    p.birthdate = '2021-12-12';
    return p ;
}).then( p => {
    console.log( '已修改的 Panda 实例: ' , p );
    // 从 Panda 实例中获取 id 属性的值
    const pandaId = p.id ;
    // 删除 Panda 实例 中的 id 属性 ( 为了避免在 UPDATE 的 SET 子句中出现 id = ? )
    delete p.id ;
    // 注意这里的 update 又是异步操作，又返回了一个 Promise 对象
    // update 函数第一个参数中包含了各个列的值(建议排除主键)
    // update 函数第二个参数表示执行 update 语句的条件
    return Panda.update( p , { 
        where : { 
            id: pandaId 
        }
    });
}).then( result => {
    console.log( result );
}).catch( reason => {
    console.log( reason );
});